import java.util.*;

public class Main {

    //
    public static void main1(String[] args){
        Scanner in = new Scanner(System.in);
        char[] s = in.next().toCharArray();

        int ret = (int)1e9;
        for(char ch = 'a'; ch <= 'z'; ch++){
            int sum = 0;
            for(int i = 0; i < s.length; i++){
                sum += Math.min(Math.abs(s[i] - ch), 26 - Math.abs(s[i] - ch));
            }
            ret = Math.min(ret, sum);
        }
        System.out.println(ret);
    }

    //
    public ArrayList<Integer> findOrder (int numProject, ArrayList<ArrayList<Integer>> groups) {
        List<List<Integer>> edges = new ArrayList<>();  //存储边
        for(int i = 0; i < numProject; i++){
            edges.add(new ArrayList<>());
        }
        int[] in= new int[numProject]; //入度

        //1.建图
        for(int i = 0; i < groups.size(); i++){
            int a = groups.get(i).get(0), b = groups.get(i).get(1);  // b -> a
            in[a]++;
            edges.get(b).add(a);
        }

        Queue<Integer> queue = new LinkedList<>();
        //2.入度为 0 的点加入到队列中
        for(int i = 0; i < numProject; i++){
            if(in[i] == 0){
                queue.add(i);
            }
        }

        ArrayList<Integer> ret = new ArrayList<>();
        //3.拓扑排序 (BFS)
        while(!queue.isEmpty()){
            int a = queue.poll();
            ret.add(a);
            for(int b : edges.get(a)){  // a -> b
                if(--in[b] == 0){
                    queue.add(b);
                }
            }
        }

        if(ret.size() == numProject){
            return ret;
        }else{
            return new ArrayList<>();
        }
    }

    //
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n + 1];
        for(int i = 1; i <= n; i++){
            arr[i] = in.nextInt();
        }

        int[] f = new int[n + 1];
        int[] g = new int[n + 1];
        for(int i = 1; i <= n; i++){
            f[i] = 1;
            for(int j = 1; j < i; j++){
                if(arr[i] > arr[j]){
                    f[i] = Math.max(f[i], f[j] + 1);
                }
            }
        }
        for(int i = n; i >= 1; i--){
            g[i] = 1;
            for(int j = n; j > i; j--){
                if(arr[i] > arr[j]){
                    g[i] = Math.max(g[i], g[j] + 1);
                }
            }
        }

        int len = 0;
        for(int i = 1; i <= n; i++){
            len = Math.max(len, f[i] + g[i] - 1);
        }
        System.out.println(n - len);
    }

    //
//    public ListNode insertGreatestCommonDivisors(ListNode head) {
//        ListNode node = head;
//        while(node.next != null){
//            node.next = new ListNode(gcd(node.val, node.next.val), node.next);
//            node = node.next.next;
//        }
//        return head;
//    }
//
//    public int gcd(int a, int b){
//        while(a != 0){
//            int tmp = a;
//            a = b % a;
//            b = tmp;
//        }
//        return b;
//    }

    //
}
